using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Decisions.HL7.Message;
using DecisionsFramework;

namespace Decisions.HL7.Message
{
    public class GrouperStatusAttribute:RuleAttribute
    {
        private Dictionary<HL7Version, string[]> validVersionCodes = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, string[]> validVersionDescriptions = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, HL7TableType> tableVersionTypes = new Dictionary<HL7Version, HL7TableType>();

        public GrouperStatusAttribute()
        {
            // init the values for table version types
						tableVersionTypes[HL7Version.v26] = HL7TableType.User;
						tableVersionTypes[HL7Version.v27] = HL7TableType.User;
			
            
			// init the values for version codes
						validVersionCodes[HL7Version.v26] = new string[]{"0","1","2","3","4","5","6","7","8","9"};
						validVersionCodes[HL7Version.v27] = new string[]{"0","1","2","3","4","5","6","7","8","9"};
			
			// init the values for version descriptions
						validVersionDescriptions[HL7Version.v26] = new string[]{"Normal grouping","Invalid or missing primary diagnosis","Diagnosis is not allowed to be primary","Data does not fulfill DRG criteria","Invalid age, admission date, date of birth or discharge date","Invalid gender","Invalid discharge status","Invalid weight ad admission","Invalid length of stay","Invalid field \"same day\""};
						validVersionDescriptions[HL7Version.v27] = new string[]{"Normal grouping","Invalid or missing primary diagnosis","Diagnosis is not allowed to be primary","Data does not fulfill DRG criteria","Invalid age, admission date, date of birth or discharge date","Invalid gender","Invalid discharge status","Invalid weight ad admission","Invalid length of stay","Invalid field \"same day\""};
			            

        }

        
        public override ValidationIssue[] RunRule(string name, object owningObject, object value)
        {
            //todo: check if the value is valid in the current version
            //if the value is not valid in the current version, add it as a validation issue


            return new ValidationIssue[0];
        }
    }
}
